package com.xiaobias.mergeSortedArray;

/**
 * 88. 合并两个有序数组
 */
public class MergeSortedArray88 {
//    public void merge(int[] nums1, int m, int[] nums2, int n) {
//        for (int i = 0; i < m; i++) {
//            nums1[m + 1] = nums2[i];
//        }
//        Arrays.sort(nums1);
//    }

//    public void merge(int[] nums1, int m, int[] nums2, int n) {
//        int k = m + n;
//        int[] temp = new int[k];
//        for (int index = 0, nums1Index = 0, nums2Index = 0; index < k; index ++) {
//            if (nums1Index >= m) { // nums1 数组已经取完，完全取 nums2 数组的值即可
//                temp[index] = nums2[nums2Index ++];
//            } else if (nums2Index >= n) { // numbs2 数组已经取完，完全取nums1数组的值即可
//                temp[index] = nums1[nums1Index ++];
//            } else if (nums1[nums1Index] < nums2[nums2Index]) {
//                // nums1 数组的元素值小于 nums2 数组，取 nums1 数组的值
//                temp[index] = nums1[nums1Index ++];
//            } else  {
//                // nums2 数组的元素值取完等于nums1左边数组，取 nums2 数组的值
//                temp[index] = nums2[nums2Index ++];
//            }
//        }
//        System.arraycopy(temp, 0, nums1, 0, k);
//    }

    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int k = m + n;
        for (int index = k - 1, nums1Index = m - 1, nums2Index = n - 1; index >= 0; index --) {
            if (nums1Index < 0) {
                // nums1 已经取完， 完全取 nums2 的值即可
                nums1[index] = nums2[nums2Index --];
            } else if (nums2Index < 0) {
                // nums2 已经取完，完取取 nums1 的值即可
                break;
            } else if (nums1[nums1Index] > nums2[nums2Index]) {
                // nums1 的元素值大于 nums2, 取 nums1 的值
                nums1[index] = nums1[nums1Index --];
            } else {
                // nums2 的元素值大于 nums1, 取 nums2 的值
                nums1[index] = nums2[nums2Index --];
            }
        }
    }
}
